1 /** 2 * License: 3 * Copyright Devisualization (Richard Andrew Cattermole) 2014 - 2017. 4 * Distributed under the Boost Software License, Version 1.0. 5 * (See accompanying file LICENSE_1_0.txt or copy at 6 * http://www.boost.org/LICENSE_1_0.txt) 7 */ 8 module devisualization.util.photoshop_aco.exporter; 9 import devisualization.util.photoshop_aco.defs; 10 11 void exportData(ACOPalette _, out ubyte[] data) { 12 uint offset = 0; 13 writeData(_, data, 1, offset); 14 writeData(_, data, 2, offset); 15 } 16 17 void addValue(ref ubyte[] data, ushort value) { 18 import std.bitmanip : nativeToBigEndian; 19 data ~= nativeToBigEndian(value); 20 } 21 22 void addValue(ref ubyte[] data, uint value) { 23 import std.bitmanip : nativeToBigEndian; 24 data ~= nativeToBigEndian(value); 25 } 26 27 void addValue(ref ubyte[] data, dstring value) { 28 ubyte[] ret; 29 foreach(c; value) { 30 import std.bitmanip : nativeToBigEndian; 31 ret ~= nativeToBigEndian(c); 32 } 33 ret ~= [0, 0]; // null term 34 data ~= ret; 35 } 36 37 void writeData(ACOPalette _, ref ubyte[] data, ushort ver, ref uint offset) { 38 data.addValue(ver); 39 data.addValue(cast(ushort)_.colors.length); 40 41 foreach(i, color; _.colors) { 42 data.addValue(cast(ushort)0); 43 data.addValue(color.r); 44 data.addValue(color.g); 45 data.addValue(color.b); 46 data.addValue(0); 47 48 if (ver == 2) { 49 data.addValue(cast(uint)_.names[i].length); 50 data.addValue(_.names[i]); 51 } 52 } 53 }